home *** CD-ROM | disk | FTP | other *** search
/ Amiga Format CD 24 / Amiga Format AFCD24 (Feb 1998, Issue 108).iso / -seriously_amiga- / shareware / programming / other / kaliosisquantrum / morb / autocrop.s next >
Text File  |  1998-01-12  |  3KB  |  193 lines

  1. *
  2. * CdBSian Obviously Universal & Interactive Nonsense (COUIN)
  3. * (Absurdité CdBSienne Manifestement Universelle et Interactive)
  4. * ©1997-1998, CdBS Software (MORB)
  5. * Bitmap auto cropping routines
  6. * $Id: AutoCrop.s 0.4 1997/09/14 17:09:24 MORB Exp MORB $
  7. *
  8.  
  9. ;fs "_ACScanBitmap"
  10. _ACScanBitmap:     ; a0=Bitmap d0=Width d1=Height
  11.      moveq     #0,d3
  12.      move.l    d0,d2
  13.      lsr.l     #4,d2
  14.      addx.l    d3,d2
  15.      move.l    d2,-(a7)
  16.      mulu      #NbPlanes,d2
  17.      move.l    d2,d7
  18.      subq.l    #1,d2
  19.  
  20. .TopScan:
  21.      move.l    d2,d3
  22.      move.l    a0,a2
  23.  
  24. .TopScanLine:
  25.      tst.w     (a2)+
  26.      dbne      d3,.TopScanLine
  27.  
  28.      tst.w     -2(a2)
  29.      bne.s     .TopScanDone
  30.  
  31.      move.l    a2,a0
  32.      subq.l    #1,d1
  33.      beq.s     .EmptyBitmap
  34.  
  35.      bra.s     .TopScan
  36.  
  37. .TopScanDone:
  38.  
  39.      move.l    d7,d3
  40.      mulu      d1,d3
  41.      lea       (a0,d3.l*2),a2
  42.  
  43.      move.l    d7,d2
  44.      subq.l    #1,d2
  45.  
  46. .BottomScan:
  47.      move.l    d2,d3
  48.      move.l    a2,a3
  49.  
  50. .BottomScanLine:
  51.      tst.w     -(a3)
  52.      dbne      d3,.BottomScanLine
  53.  
  54.      tst.w     (a3)
  55.      bne.s     .BottomScanDone
  56.  
  57.      move.l    a3,a2
  58.      subq.l    #1,d1
  59.      bra.s     .BottomScan
  60.  
  61. .BottomScanDone:
  62.  
  63.      move.l    a0,a2
  64.      move.l    (a7)+,d2
  65.      move.l    d2,d7
  66.      add.l     d7,d7
  67.      moveq     #0,d5
  68.      moveq     #0,d6
  69.  
  70. .LeftScan:
  71.      move.l    d1,d3
  72.      mulu      #NbPlanes,d3
  73.      subq.l    #1,d3
  74.      move.l    a2,a3
  75.  
  76. .LeftScanColumn:
  77.      or.w      (a3),d5
  78.      add.l     d7,a3
  79.      dbf       d3,.LeftScanColumn
  80.  
  81.      tst.w     d5
  82.      bne.s     .LeftScanDone
  83.  
  84.      addq.l    #2,a2
  85.      subq.l    #1,d2
  86.      bra.s     .LeftScan
  87.  
  88. .LeftScanDone:
  89.  
  90.      bfffo     d5{16:16},d5
  91.      sub.l     #16,d5
  92.      move.l    a2,a0
  93.  
  94.      lea       -2(a0,d2.l*2),a2
  95.      moveq     #0,d4
  96.  
  97. .RightScan:
  98.      move.l    d1,d3
  99.      mulu      #NbPlanes,d3
  100.      subq.l    #1,d3
  101.      move.l    a2,a3
  102.      sub.l     d7,a3
  103.  
  104. .RightScanColumn:
  105.      add.l     d7,a3
  106.      or.w      (a3),d4
  107.      dbf       d3,.RightScanColumn
  108.  
  109.      tst.w     d4
  110.      bne.s     .RightScanDone
  111.  
  112.      subq.l    #2,a2
  113.      subq.l    #1,d2
  114.      bra.s     .RightScan
  115.  
  116. .RightScanDone:
  117.  
  118.      movem.l   d1-2/d5/d7/a0,_ACHeight
  119.      moveq     #-1,d0
  120.  
  121. .CountRightBits:
  122.      addq.l    #1,d0
  123.      lsr.w     #1,d4
  124.      bcc.s     .CountRightBits
  125.      move.l    d0,_ACRightBits
  126.  
  127.      moveq     #-1,d0
  128.      rts
  129.  
  130. .EmptyBitmap:
  131.      moveq     #0,d0
  132.      rts
  133. ;fe
  134. ;fs "_ACCut"
  135. _ACHeight:
  136.      ds.l      1
  137. _ACWidth:
  138.      ds.l      1
  139. _ACShift:
  140.      ds.l      1
  141. _ACTotWidth:
  142.      ds.l      1
  143. _ACBitmap:
  144.      ds.l      1
  145. _ACDestModulo:
  146.      ds.l      1
  147. _ACRightBits:
  148.      ds.l      1
  149. _ACCut:  ; a0=Dest. bitmap
  150.      movem.l   _ACHeight,d0-3/a1-2
  151.  
  152.      ;not.w     d2
  153.      ;addq.l    #1,d2
  154.      ;and.w     #$f,d2
  155.  
  156.      ;tst.b     d2
  157.      ;beq.s     .Glorpf
  158.      ;subq.l    #2,a0
  159.      ;subq.l    #2,a2
  160. .Glorpf:
  161.  
  162.      mulu      #NbPlanes,d0
  163.      subq.l    #1,d0
  164.      sub.l     d1,d3
  165.      sub.l     d1,d3
  166.      subq.l    #2,d3
  167.      subq.l    #1,d1
  168.  
  169.      moveq     #-1,d7
  170.      lsr.w     d2,d7
  171.  
  172. .YLoop:
  173.      move.l    d0,a3
  174.  
  175.      move.l    d1,d4
  176.      move.w    (a1)+,d5
  177.  
  178. .XLoop:
  179.      swap      d5
  180.      move.w    (a1)+,d5
  181.      move.l    d5,d6
  182.      lsl.l     d2,d6
  183.      swap      d6
  184.      move.w    d6,(a0)+
  185.      dbf       d4,.XLoop
  186.  
  187.      add.l     d3,a1
  188.      add.l     a2,a0
  189.      move.l    a3,d0
  190.      dbf       d0,.YLoop
  191.      rts
  192. ;fe
  193.